package com.yang.chain_design_pattern.abs;

/**
 * @Description: 所有处理器的抽象父类
 * @Author: 杨 强
 * @CreateTime: 2022-11-01 16:00
 */
public abstract class Handler {
    /**
     * 下一个处理器
     */
    protected Handler successor = null;

    /**
     * 设置下一个处理器
     * @param successor 处理器
     */
    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    /**
     * 处理器链开始处理请求
     */
    public void handle(String type){
        // 执行处理器
        boolean doHandle = doHandle(type);

        // 如果有下一个处理器,并且没有上一个处理器没有执行成功,那么就继续执行
        if (successor != null && !doHandle){
            successor.handle(type);
        }
    }

    /**
     * 具体的处理器的处理逻辑
     * @param type 请求参数
     * @return 处理成功就返回true,处理失败就返回false
     */
    protected abstract boolean doHandle(String type);
}
